
package com.esdk.utils;

public class GPSHelper{
	// 圆周率
	public static final double PI=3.14159265358979324;
	// 赤道半径(单位m)  
	private static final double EARTH_RADIUS=6378137;

	/** 
	 * 转化为弧度(rad) 
	 * */
	private static double rad(double d){
		return d*Math.PI/180.0;
	}

	/** 
	 * 基于googleMap中的算法得到两经纬度之间的距离,
	 * 计算精度与谷歌地图的距离精度差不多，相差范围在0.2米以下 
	 * @param lon1 第一点的经度 
	 * @param lat1 第一点的纬度 
	 * @param lon2 第二点的经度 
	 * @param lat3 第二点的纬度 
	 * @return 返回的距离，单位:米 
	 * */
	public static double distance(double lon1,double lat1,double lon2,double lat2){
		double radLat1=rad(lat1);
		double radLat2=rad(lat2);
		double a=radLat1-radLat2;
		double b=rad(lon1)-rad(lon2);
		double s=2*Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2)+Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
		s=s*EARTH_RADIUS;
		//s = Math.round(s * 10000) / 10000;  
		return EasyMath.round(s,2);
	}
	
	public static void main(String[] args){
		System.out.print( "距离" + GPSHelper.distance(116.95400, 39.95400, 116.95300, 39.95300)+"米");
	}
}
